cover

昨天我让 Claude 帮我审代码。它输出一堆建议,全是老生常谈:变量命名、注释规范、错误处理。

我想要的不是这些。我要它检查 SQL 注入、敏感信息硬编码、未授权访问。安全问题才是重点。

于是我花 10 分钟,给 Claude 写了个「安全审计」Skill。现在我说「帮我审代码」,它自动按我的安全清单检查。

这就是 Skills 的魔力。

Skills 是什么

一句话:教 Claude 干特定活的说明书

你写个 Markdown 文件,告诉 Claude:

  • 技能叫什么名字
  • 什么时候触发
  • 怎么执行

Claude 自动识别你的意图,匹配对应 Skill,按你的指令干活。

不用每次重复描述。一次配置,永久生效。

skills-workflow

准备工作

先确保装了 Claude Code。没装的话:

npm install -g @anthropic-ai/claude-code

Skills 放在 ~/.claude/skills/ 目录。一个 Skill 一个文件夹,里面至少有个 SKILL.md

~/.claude/skills/
├── code-review/
│ └── SKILL.md
├── git-commit/
│ └── SKILL.md
└── ...

动手:创建「安全审计」Skill

做个实用的:让 Claude 按安全清单审代码。

Step 1:创建目录

mkdir -p ~/.claude/skills/security-review

image-20260109184741861

Step 2:写 SKILL.md

创建 ~/.claude/skills/security-review/SKILL.md

---
name: security-review
description: "代码安全审计。检查 SQL 注入、XSS、敏感信息泄露、未授权访问等安全问题。当用户提到代码审计、安全检查、安全审查时触发。"
---

# 安全代码审计

你是一名资深安全工程师。用户请求代码审计时,按以下清单逐项检查。

## 审计清单

### 1. 注入类漏洞
- [ ] SQL 注入:是否用参数化查询
- [ ] 命令注入:shell 命令参数有没有转义
- [ ] XSS:用户输入有没有转义

### 2. 认证与授权
- [ ] 有没有未授权访问的接口
- [ ] 密码是不是明文存储
- [ ] Session/Token 生成安全吗

### 3. 敏感信息
- [ ] 有没有硬编码的密钥、密码
- [ ] 日志里有没有敏感信息
- [ ] 错误信息会不会泄露内部细节

### 4. 其他
- [ ] 依赖有没有已知漏洞
- [ ] 文件上传有没有类型/大小限制
- [ ] 有没有 CSRF 防护

## 输出格式

按风险等级分类:

**高风险**:立即修
**中风险**:尽快修
**低风险**:建议改
**安全**:没问题

每个问题给出:
1. 问题是什么
2. 在哪一行
3. 怎么修

保存。搞定。

image-20260109184801727

Step 3:测试

进入一个代码项目:

cd your-project
claude

说:「帮我查查这代码有没有安全问题」

Claude 自动加载 security-review Skill,按你定义的清单检查。

security-review-demo

关键配置

name 和 description

---
name: security-review
description: "代码安全审计。检查 SQL 注入、XSS..."
---
  • name:小写字母、数字、连字符,最多 64 字符
  • description:决定 Claude 什么时候触发这个 Skill

description 写得好不好,直接影响匹配准确度。写的时候想两件事:

  1. 这 Skill 干嘛的
  2. 用户会怎么说

比如:「代码安全审计。当用户提到代码审计、安全检查、安全审查时触发。」

指令内容

--- 下面是正文。你可以:

  • 定角色(你是资深安全工程师)
  • 列步骤清单
  • 规定输出格式
  • 给示例

Claude 会老老实实照着做。

进阶:多文件 Skill

简单 Skill 一个文件够了。复杂的可以拆:

security-review/
├── SKILL.md # 主文件
├── checklist.md # 详细清单
├── examples.md # 示例
└── scripts/
└── scan.py # 辅助脚本

SKILL.md 里引用:

详细清单见 `checklist.md`
自动扫描跑 `scripts/scan.py`

Claude 用到时才加载。官方叫「渐进式披露」——别一股脑塞进去。

两个实用 Skill

示例 1:Git 提交助手

---
name: git-commit
description: "生成规范的 Git 提交信息。用户说 commit、提交代码时触发。"
---

# Git Commit 助手

分析暂存区改动,生成 Conventional Commits 格式的提交信息。

## 格式

<type>(<scope>): <description>

## type 类型

- feat: 新功能
- fix: 修 bug
- docs: 改文档
- refactor: 重构
- test: 测试
- chore: 杂活

## 规则

1. description 不超过 50 字符
2. 用祈使句(Add xxx,不是 Added xxx)
3. 结尾不加句号

示例 2:API 文档生成器

---
name: api-docs
description: "生成 API 文档。用户说生成文档、API 文档时触发。"
---

# API 文档生成器

读代码里的函数/类定义,输出 Markdown 格式文档。

## 每个函数包含

- 函数签名
- 参数说明
- 返回值
- 示例
- 注意事项

## 输出格式

### `function_name(param1, param2)`

**参数:**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| param1 | string | 是 | 参数描述 |

**返回值:** xxx

**示例:**
\`\`\`python
result = function_name("hello", 123)
\`\`\`

Skill 不生效?

查这几点:

  1. 文件位置:必须在 ~/.claude/skills/xxx/SKILL.md
  2. YAML 格式:开头 ---,name 和 description 不能少
  3. description:Claude 没匹配到?加更多触发词试试

在 Claude Code 里输 /skills 看已加载的列表。

分享给别人

方法 1:放项目里

your-project/
├── .claude/
│ └── skills/
│ └── your-skill/
│ └── SKILL.md
└── src/

团队成员 clone 下来就能用。

方法 2:发布插件

打包成 npm 包或独立仓库。这个复杂点,以后单独写。

最后

Skills 就是给 Claude 写说明书。

  1. 建文件夹和 SKILL.md
  2. 写 name 和 description
  3. 填指令
  4. 测试、迭代

10 分钟搞定一个。

现在去试试。把你天天重复跟 Claude 说的话,写成 Skill。以后一句话,它就知道该怎么干。